﻿#define  _CRT_SECURE_NO_WARNINGS  1
#include "Stack.h"
//#include <iostream>
//
//int main()
//{
//	std::cout << "hello world" << std::endl;
//
//	return 0;
//
//}

//#include<iostream>
//using namespace std;
//int main()
//{
//	cout << "hello world" << endl;
//	return 0;
//}


//#include<stdio.h>
//#include<stdlib.h>
//
//int rand = 10;
//int main()
//{
//	printf("%d\n", rand);
//	return 0;
//}


//#include<stdio.h>
//#include<stdlib.h>
//
//namespace bit
//{
//	int rand = 10;
//}
//
//int main()
//{
//	printf("%p\n", rand);
//	return 0;
//}


//namespace wjy
//{
//	namespace pg
//	{
//		int rand = 1;
//			int add(int left, int right)
//			{
//				return left + right;
//			}
//	}
//	namespace hg
//	{
//		int rand = 2;
//		int add(int left, int right)
//		{
//			return left + right;
//		}
//				
//		struct Node
//					{
//						struct Node* next;
//						int val;
//					};
//	}
//}
//
//int main()
//{
//	printf("%d\n", wjy::pg::rand);
//	printf("%d\n", wjy::pg::add(2, 3));
//	printf("%d\n", wjy::hg::rand);
//	printf("%d\n", wjy::hg::add(3, 5));
//	struct wjy::hg::Node node;
//	return 0;
//}

//int main()
//{
//	wjy::ST st;
//	wjy::STInit(&st);
//	wjy::StackPush(&st, 1);
//	wjy::StackPush(&st, 2);
//	wjy::StackPush(&st, 3);
//	wjy::StackPush(&st, 4);
//	wjy::StackPush(&st, 5);
//	return 0;
//}

//using namespace wjy;
//int main()
//{
//	ST st;
//	STInit(&st);
//	StackPush(&st, 1);
//	STDestroy(&st);
//	return 0;
//}


//using wjy::StackPush;
//int main()
//{
//	wjy::ST st;
//	wjy::STInit(&st);
//	StackPush(&st, 1);
//	StackPush(&st, 2);
//	StackPush(&st, 3);
//	StackPush(&st, 4);
//	return 0;
//}

//#include<iostream>
//using namespace std;
//int main()
//{
//	int i = 1;
//	double b = 2.2;
//	cout << i << " " << b << endl;
//	return 0;
//}


//using namespace wjy;
//int main()
//{
//    ST st;
//	STInit(&st);
//	STInit(&st, 1000);
//	for (int i = 0; i < 1000; i++)
//	{
//		StackPush(&st, 1);
//	}
//	return 0;
//}


//void func(int n = 0)
//{
//	printf("%d\n", n);
//}
//int main()
//{
//	func();
//	func(10);
//	return 0;
//}


//#include<iostream>
//using namespace std;
//// 全缺省 
//void Func1(int a = 10, int b = 20, int c = 30)
//{
//	cout << "a = " << a << endl;
//	cout << "b = " << b << endl;
//	cout << "c = " << c << endl << endl;
//}
//
//void Func2(int a , int b = 20, int c = 30)
//{
//	cout << "a = " << a << endl;
//	cout << "b = " << b << endl;
//	cout << "c = " << c << endl << endl;
//}
//
//int main()
//{
//	Func1();
//	Func1(100, 200, 300);
//
//	Func2(100);
//	Func2(100, 200);
//	Func2(100, 200, 300);
//	return 0;
//}


#include<iostream>
using namespace std;

// 1、参数类型不同 
//int Add(int left, int right)
//{
//	cout << "int Add(int left, int right)" << endl;
//	return left + right;
//}
//double Add(double left, double right)
//{
//	cout << "double Add(double left, double right)" << endl;
//	return left + right;
//}
//
////2.参数个数不同
//void f()
//{
//	cout << "f()" << endl;
//}
//
//void f(int a)
//{
//	cout << "f(a)" << endl;
//}
//
////3.参数类型顺序不同
//void f(int a, char b)
//{
//	cout << "f(int ,char)" << endl;
//}
//void f(char a, int b)
//{
//	cout << "f(char,int)" << endl;
//}


////返回值不同不构成函数重载
//int f()
//{
//	cout << "<int>f" << endl;
//}
//void f()
//{
//	cout << "<void>f" << endl;
//}

//void f()
//{
//	cout << "f()" << endl;
//}
//void f(int a = 10)
//{
//	cout << "f(int a=10)" << endl;
//}
//int main()
//{
//	//Add(2, 3);
//	//Add(2.2, 3.3);
//	//f();
//	//f(2);
//	//f(1, 'a');
//	//f('b', 2);
//	f();
//	f(10);
//	return 0;
//}


//引用
//void swap(int& ra, int& rb)
//{
//	int tmp = ra;
//	ra = rb;
//	rb = tmp;
//}
//void swap(double& ra, double& rb)
//{
//	double tmp = ra;
//	ra = rb;
//	rb = tmp;
//}
//int main()
//{
//	//int a = 10;
//	//int& b = a;
//	//int& c = a;
//	//++b;
//	//cout << a <<" "<< b <<" "<< c << endl;
//
//	int a = 10;
//	int b = 8;
//	swap(a, b);
//	cout << a << " " << b << endl;
//
//	double d1 = 1.1, d2 = 2.2;
//	swap(d1, d2);
//	cout << d1 << " " << d2 << endl;
//	return 0;
//}

//引用的特性
//int main()
//{
//	//引用必须初始化
//	//int& ra;
//
//	int a = 10;
//	int& ra = a;
//	int x = 100;
//	ra = x;
//	cout << a << " " << ra << endl;
//	return 0;
//}



//	typedef struct SeqList
//	{
//		int a[10];
//		int size;
//	}SLT;
//	void SeqPushBack(SLT & sl, int x)
//	{}
//
//
//	typedef struct ListNode
//	{
//		int val;
//		struct ListNode* next;
//	}LTNode, * PNode;
//
//	//typedef struct ListNode LTNode;
//	//typedef struct ListNode* PNode;
//	// 指针变量也可以取别名，这⾥LTNode*& phead就是给指针变量取别名 
//	// 这样就不需要⽤⼆级指针了，相对⽽⾔简化了程序 
//	//void ListPushBack(LTNode* & phead,int x)
//	//void ListPushBack(PNode & phead,int x)
//
//	void ListPushBack(PNode & phead, int x)
//	{
//		PNode newnode = (PNode)malloc(sizeof(LTNode));
//		newnode->val = x;
//		newnode->next = NULL;
//		if (phead == NULL)
//		{
//			phead = newnode;
//		}
//		else
//		{
//			//...
//		}
//	}
//
//	void ListPushBack(LTNode** pphead, int x)
//	{
//		LTNode* newnode = (LTNode*)malloc(sizeof(LTNode));
//		newnode->val = x;
//		newnode->next = NULL;
//		if (*pphead == NULL)
//		{
//			*pphead = newnode;
//		}
//		else
//		{
//			//...
//		}
//	}
//int main()
//{
//	SLT sl;
//	SeqPushBack(sl, 1);
//	//PNode plist = NULL;
//	//ListPushBack(plist, 1);
//	LTNode* plist = NULL;
//	ListPushBack(&plist, 1);
//	return 0;
//}


//#include<iostream>
//using namespace std;
//using namespace wjy;
////引用做返回值
//int main()
//{
//	ST st;
//	STInit(&st);
//	StackPush(&st, 1);
//	StackPush(&st, 2);
//	StackPush(&st, 3);
//	StackPush(&st, 4);
//	cout << Stacktop(&st) << endl;
//
//	Stacktop(&st) += 10;
//	return 0;
//}


//const引用

//void func(const int& ra)
//{
//
//}
//int main()
//{
//	int a = 10;
//	func(10);
//	func(a);
//	func(a * 3);
//	double d1 = 1.1;
//	func(d1);
//	return 0;
//}

void func(int& ra)
{

}
int main()
{
	int a = 10;
	func(10);
	func(a);
	func(a * 3);
	double d1 = 1.1;
	func(d1);
	return 0;
}